#requires AutoHotkey v2
-; UltimateKEYS (for AutoHotkey v2).ahk - 2025-02-06
+; UltimateKEYS (for AutoHotkey v2).ahk - 2025-08-14
; Website : https://pieter-degroote.github.io/UltimateKEYS/
compose[".G"] := "{u+0120}" ; (Ġ) G with dot above
compose[".h"] := "{u+1e23}" ; (ḣ) h with dot above
compose[".H"] := "{u+1e22}" ; (Ḣ) H with dot above
-compose[".i"] := "{u+0131}" ; (ı) dotless i (Turkish, Azerbaijani)
-compose[".I"] := "{u+0130}" ; (İ) I with dot above (Turkish, Azerbaijani)
+compose[".i"] := "{u+0131}" ; (ı) dotless i
+compose[".I"] := "{u+0130}" ; (İ) I with dot above
compose[".j"] := "{u+0237}" ; (ȷ) dotless j
compose[".l"] := "{u+0140}" ; (ŀ) l with middle dot
compose[".L"] := "{u+013f}" ; (Ŀ) L with middle dot
compose[".O"] := "{u+022e}" ; (Ȯ) O with dot above
compose[".p"] := "{u+1e57}" ; (ṗ) p with dot above
compose[".P"] := "{u+1e56}" ; (Ṗ) P with dot above
-compose[".q"] := "{u+1e9b}" ; (ẛ) long s with dot above
compose[".r"] := "{u+1e59}" ; (ṙ) r with dot above
compose[".R"] := "{u+1e58}" ; (Ṙ) R with dot above
compose[".s"] := "{u+1e61}" ; (ṡ) s with dot above
compose["-D"] := "{u+0110}" ; (Đ) D with stroke
compose["-e"] := "{u+0113}" ; (ē) e with macron
compose["-E"] := "{u+0112}" ; (Ē) E with macron
-compose["-g"] := "{u+01e5}" ; (ǥ) g with stroke (Skolt Sami)
-compose["-G"] := "{u+01e4}" ; (Ǥ) G with stroke (Skolt Sami)
-compose["-h"] := "{u+0127}" ; (ħ) h with stroke (Maltese)
-compose["-H"] := "{u+0126}" ; (Ħ) H with stroke (Maltese)
+compose["-g"] := "{u+01e5}" ; (ǥ) g with stroke
+compose["-G"] := "{u+01e4}" ; (Ǥ) G with stroke
+compose["-h"] := "{u+0127}" ; (ħ) h with stroke
+compose["-H"] := "{u+0126}" ; (Ħ) H with stroke
compose["-i"] := "{u+012b}" ; (ī) i with macron
compose["-I"] := "{u+012a}" ; (Ī) I with macron
compose["-j"] := "{u+0249}" ; (ɉ) j with stroke
; Compose : Macron and Stroke (additional)
-compose["_f"] := "{u+1e9d}" ; (ẝ) long s with high stroke
compose["_g"] := "{u+1e21}" ; (ḡ) g with macron
compose["_G"] := "{u+1e20}" ; (Ḡ) G with macron
compose["_i"] := "{u+0268}" ; (ɨ) i with stroke
compose["bD"] := "{u+0189}" ; (Ɖ) capital letter African D
compose["be"] := "{u+0115}" ; (ĕ) e with breve
compose["bE"] := "{u+0114}" ; (Ĕ) E with breve
-compose["bf"] := "{u+0259}" ; (ə) small letter schwa (Azerbaijani)
-compose["bF"] := "{u+018f}" ; (Ə) capital letter schwa (Azerbaijani)
compose["bg"] := "{u+011f}" ; (ğ) g with breve
compose["bG"] := "{u+011e}" ; (Ğ) G with breve
compose["bi"] := "{u+012d}" ; (ĭ) i with breve
compose["bI"] := "{u+012c}" ; (Ĭ) I with breve
compose["bo"] := "{u+014f}" ; (ŏ) o with breve
compose["bO"] := "{u+014e}" ; (Ŏ) O with breve
-compose["bs"] := "{u+0219}" ; (ș) s with comma below (Romanian)
-compose["bS"] := "{u+0218}" ; (Ș) S with comma below (Romanian)
-compose["bt"] := "{u+021b}" ; (ț) t with comma below (Romanian)
-compose["bT"] := "{u+021a}" ; (Ț) T with comma below (Romanian)
+compose["bs"] := "{u+0219}" ; (ș) s with comma below
+compose["bS"] := "{u+0218}" ; (Ș) S with comma below
+compose["bt"] := "{u+021b}" ; (ț) t with comma below
+compose["bT"] := "{u+021a}" ; (Ț) T with comma below
compose["bu"] := "{u+016d}" ; (ŭ) u with breve
compose["bU"] := "{u+016c}" ; (Ŭ) U with breve
-compose["bw"] := "{u+01bf}" ; (ƿ) small letter wynn
-compose["bW"] := "{u+01f7}" ; (Ƿ) capital letter wynn
-compose["by"] := "{u+021d}" ; (ȝ) small letter yogh
-compose["bY"] := "{u+021c}" ; (Ȝ) capital letter yogh
compose["b3"] := "{u+0292}" ; (ʒ) small letter ezh
compose["b#"] := "{u+01b7}" ; (Ʒ) capital letter ezh
compose["ft"] := "{u+0288}" ; (ʈ) t with retroflex hook
compose["fT"] := "{u+01ae}" ; (Ʈ) T with retroflex hook
compose["fv"] := "{u+2c71}" ; (ⱱ) v with right hook
+compose["fy"] := "{u+1eff}" ; (ỿ) y with loop
+compose["fY"] := "{u+1efe}" ; (Ỿ) Y with loop
compose["fz"] := "{u+0290}" ; (ʐ) z with retroflex hook
-; Compose : Swash Tail and Other Variations
-
-compose["tc"] := "{u+a793}" ; (ꞓ) c with bar
-compose["tC"] := "{u+a792}" ; (Ꞓ) C with bar
-compose["tf"] := "{u+a799}" ; (ꞙ) f with stroke
-compose["tF"] := "{u+a798}" ; (Ꞙ) F with stroke
-compose["tl"] := "{u+2c61}" ; (ⱡ) l with double bar
-compose["tL"] := "{u+2c60}" ; (Ⱡ) L with double bar
-compose["ts"] := "{u+023f}" ; (ȿ) s with swash tail
-compose["tS"] := "{u+2c7e}" ; (Ȿ) S with swash tail
-compose["tz"] := "{u+0240}" ; (ɀ) z with swash tail
-compose["tZ"] := "{u+2c7f}" ; (Ɀ) Z with swash tail
-
-
; Compose : Latin Greek Letters and Variations
-compose["la"] := "{u+0251}" ; (ɑ) Latin small letter alpha
-compose["lA"] := "{u+2c6d}" ; (Ɑ) Latin capital letter alpha
-compose["lb"] := "{u+025e}" ; (ɞ) small letter closed reversed open e
+compose["la"] := "{u+0251}" ; (ɑ) Latin small letter alpha (script a)
+compose["lA"] := "{u+2c6d}" ; (Ɑ) Latin capital letter alpha (script A)
+compose["lb"] := "{u+a7b5}" ; (ꞵ) Latin small letter beta
+compose["lB"] := "{u+a7b4}" ; (Ꞵ) Latin capital letter beta
compose["ld"] := "{u+1e9f}" ; (ẟ) Latin small letter delta
compose["le"] := "{u+025b}" ; (ɛ) small letter open e (Latin small epsilon)
compose["lE"] := "{u+0190}" ; (Ɛ) capital letter open E (Latin capital epsilon)
compose["lS"] := "{u+01a9}" ; (Ʃ) Latin capital letter esh
compose["lu"] := "{u+028a}" ; (ʊ) Latin small letter upsilon
compose["lU"] := "{u+01b1}" ; (Ʊ) Latin capital letter upsilon
+compose["lw"] := "{u+01bf}" ; (ƿ) small letter wynn
+compose["lW"] := "{u+01f7}" ; (Ƿ) capital letter wynn
+compose["ly"] := "{u+021d}" ; (ȝ) small letter yogh
+compose["lY"] := "{u+021c}" ; (Ȝ) capital letter yogh
compose["l8"] := "{u+0223}" ; (ȣ) small letter ou
compose["l*"] := "{u+0222}" ; (Ȣ) capital letter OU
compose["l7"] := "{u+0242}" ; (ɂ) small letter glottal stop
compose["l&"] := "{u+0241}" ; (Ɂ) capital letter glottal stop
compose["l?"] := "{u+0294}" ; (ʔ) unicase letter glottal stop
+compose["l;"] := "{u+02bb}" ; (ʻ) modifier letter turned comma
+compose["l'"] := "{u+02bc}" ; (ʼ) modifier letter apostrophe
; Compose : Turned and Reversed Letters
compose["rA"] := "{u+2c6f}" ; (Ɐ) capital letter turned A
compose["rb"] := "{u+025c}" ; (ɜ) small letter reversed open e
compose["rB"] := "{u+a7ab}" ; (Ɜ) capital letter reversed open E
+compose["rc"] := "{u+025e}" ; (ɞ) small letter closed reversed open e
compose["rd"] := "{u+018d}" ; (ƍ) Latin small letter turned delta
compose["re"] := "{u+01dd}" ; (ǝ) small letter turned e
compose["rE"] := "{u+018e}" ; (Ǝ) capital letter reversed E
compose["rm"] := "{u+026f}" ; (ɯ) small letter turned m
compose["rM"] := "{u+019c}" ; (Ɯ) capital letter turned M
compose["ro"] := "{u+0264}" ; (ɤ) small letter ram's horn (baby gamma)
-compose["rq"] := "{u+0252}" ; (ɒ) Latin small letter turned alpha
-compose["rQ"] := "{u+2c70}" ; (Ɒ) Latin capital letter turned alpha
+compose["rq"] := "{u+0252}" ; (ɒ) Latin small letter turned alpha (turned script a)
+compose["rQ"] := "{u+2c70}" ; (Ɒ) Latin capital letter turned alpha (turned script A)
compose["rr"] := "{u+0279}" ; (ɹ) small letter turned r
compose["rt"] := "{u+0287}" ; (ʇ) small letter turned t
compose["rT"] := "{u+a7b1}" ; (Ʇ) small letter turned T
compose["rZ"] := "{u+01b8}" ; (Ƹ) Latin capital letter ezh reversed
+; Compose : Swash Tail and Other Variations
+
+compose["tc"] := "{u+a793}" ; (ꞓ) c with bar
+compose["tC"] := "{u+a792}" ; (Ꞓ) C with bar
+compose["tf"] := "{u+a799}" ; (ꞙ) f with stroke
+compose["tF"] := "{u+a798}" ; (Ꞙ) F with stroke
+compose["tl"] := "{u+2c61}" ; (ⱡ) l with double bar
+compose["tL"] := "{u+2c60}" ; (Ⱡ) L with double bar
+compose["ts"] := "{u+023f}" ; (ȿ) s with swash tail
+compose["tS"] := "{u+2c7e}" ; (Ȿ) S with swash tail
+compose["tz"] := "{u+0240}" ; (ɀ) z with swash tail
+compose["tZ"] := "{u+2c7f}" ; (Ɀ) Z with swash tail
+
+
; Compose : Currency Symbols
compose["$a"] := "{u+058f}" ; (֏) Armenian dram
; Compose : Various Symbols
compose["sa"] := "{u+2100}" ; (℀) account of
-compose["sb"] := "{u+203d}" ; (‽) interrobang
-compose["sB"] := "{u+2e18}" ; (⸘) inverted interrobang
compose["sc"] := "{u+2105}" ; (℅) care of
compose["sd"] := "{u+22c4}" ; (⋄) diamond operator
compose["se"] := "{u+212e}" ; (℮) estimated symbol
compose["s?"] := "{u+2e2e}" ; (⸮) reversed question mark
compose["s/"] := "{u+205e}" ; (⁞) vertical four dots
compose["s|"] := "{u+00a6}" ; (¦) broken bar
+compose["s["] := "{u+2045}" ; (⁅) left square bracket with quill
+compose["s]"] := "{u+2046}" ; (⁆) right square bracket with quill
; Compose : Math Symbols
compose["AE"] := "{u+00c6}" ; (Æ) letter AE
compose["dh"] := "{u+00f0}" ; (ð) small letter eth
compose["DH"] := "{u+00d0}" ; (Ð) capital letter eth
+compose["ee"] := "{u+0259}" ; (ə) small letter schwa
+compose["EE"] := "{u+018f}" ; (Ə) capital letter schwa
compose["fs"] := "{u+017f}" ; (ſ) small letter long s
compose["ij"] := "{u+0133}" ; (ij) ligature ij
compose["IJ"] := "{u+0132}" ; (IJ) ligature IJ
compose[".-"] := "{u+00b7}" ; (·) middle dot
compose[".3"] := "{u+2026}" ; (…) horizontal ellipsis
compose[".."] := "{u+2026}" ; (…) horizontal ellipsis
-compose["a-"] := "{u+00aa}" ; (ª) feminine ordinal indicator (Spanish, Portuguese, Italian, Galician)
-compose["o-"] := "{u+00ba}" ; (º) masculine ordinal indicator (Spanish, Portuguese, Italian, Galician)
+compose["a-"] := "{u+00aa}" ; (ª) feminine ordinal indicator
+compose["o-"] := "{u+00ba}" ; (º) masculine ordinal indicator
compose["!!"] := "{u+00a1}" ; (¡) inverted exclamation mark
compose["??"] := "{u+00bf}" ; (¿) inverted question mark
+compose["!?"] := "{u+203d}" ; (‽) interrobang
+compose["?!"] := "{u+2e18}" ; (⸘) inverted interrobang
compose["oc"] := "{u+00a9}" ; (©) copyright sign
compose["(c"] := "{u+00a9}" ; (©) copyright sign
compose["op"] := "{u+2117}" ; (℗) sound recording copyright
compose[";h"] := "{u+2043}" ; (⁃) hyphen bullet
compose[";t"] := "{u+2023}" ; (‣) triangular bullet
compose[";;"] := "{u+2022}" ; (•) bullet
+compose[":("] := "{u+2639}" ; (☹) white frowning face
+compose[":)"] := "{u+263a}" ; (☺) white smiling face
+compose[";)"] := "{u+263b}" ; (☻) black smiling face
+compose["<3"] := "{u+2665}" ; (♥) black heart suit
compose["[]"] := "{u+2610}" ; (☐) ballot box
compose["[v"] := "{u+2611}" ; (☑) ballot box with check
compose["[y"] := "{u+2611}" ; (☑) ballot box with check
compose["BU"] := "{u+0216}" ; (Ȗ) U with inverted breve
+; Compose : Letters with Two Diacritical Marks
+
+compose["Ma"] := "{u+01df}" ; (ǟ) a with diaeresis and macron
+compose["MA"] := "{u+01de}" ; (Ǟ) A with diaeresis and macron
+compose["Mq"] := "{u+01e1}" ; (ǡ) a with dot above and macron
+compose["MQ"] := "{u+01e0}" ; (Ǡ) A with dot above and macron
+compose["Mo"] := "{u+022b}" ; (ȫ) o with diaeresis and macron
+compose["MO"] := "{u+022a}" ; (Ȫ) O with diaeresis and macron
+compose["Mk"] := "{u+022d}" ; (ȭ) o with tilde and macron
+compose["MK"] := "{u+022c}" ; (Ȭ) O with tilde and macron
+compose["Ml"] := "{u+0231}" ; (ȱ) o with dot above and macron
+compose["ML"] := "{u+0230}" ; (Ȱ) O with dot above and macron
+compose["Mu"] := "{u+01d6}" ; (ǖ) u with diaeresis and macron
+compose["MU"] := "{u+01d5}" ; (Ǖ) U with diaeresis and macron
+compose["Mh"] := "{u+01d8}" ; (ǘ) u with diaeresis and acute
+compose["MH"] := "{u+01d7}" ; (Ǘ) U with diaeresis and acute
+compose["My"] := "{u+01da}" ; (ǚ) u with diaeresis and caron
+compose["MY"] := "{u+01d9}" ; (Ǚ) U with diaeresis and caron
+compose["Mj"] := "{u+01dc}" ; (ǜ) u with diaeresis and grave
+compose["MJ"] := "{u+01db}" ; (Ǜ) U with diaeresis and grave
+
+
; Compose : Circumflex Below
compose["Id"] := "{u+1e13}" ; (ḓ) d with circumflex below
compose["IU"] := "{u+1e76}" ; (Ṷ) U with circumflex below
-; Compose : Tilde Below
-
-compose["Te"] := "{u+1e1b}" ; (ḛ) e with tilde below
-compose["TE"] := "{u+1e1a}" ; (Ḛ) E with tilde below
-compose["Ti"] := "{u+1e2d}" ; (ḭ) i with tilde below
-compose["TI"] := "{u+1e2c}" ; (Ḭ) I with tilde below
-compose["Tu"] := "{u+1e75}" ; (ṵ) u with tilde below
-compose["TU"] := "{u+1e74}" ; (Ṵ) U with tilde below
-
-
-; Compose : Line Below
+; Compose : Line Below and Tilde Below
compose["Lb"] := "{u+1e07}" ; (ḇ) b with line below
compose["LB"] := "{u+1e06}" ; (Ḇ) B with line below
compose["Ld"] := "{u+1e0f}" ; (ḏ) d with line below
compose["LD"] := "{u+1e0e}" ; (Ḏ) D with line below
+compose["Le"] := "{u+1e1b}" ; (ḛ) e with tilde below
+compose["LE"] := "{u+1e1a}" ; (Ḛ) E with tilde below
compose["Lh"] := "{u+1e96}" ; (ẖ) h with line below
+compose["Li"] := "{u+1e2d}" ; (ḭ) i with tilde below
+compose["LI"] := "{u+1e2c}" ; (Ḭ) I with tilde below
compose["Lk"] := "{u+1e35}" ; (ḵ) k with line below
compose["LK"] := "{u+1e34}" ; (Ḵ) K with line below
compose["Ll"] := "{u+1e3b}" ; (ḻ) l with line below
compose["LR"] := "{u+1e5e}" ; (Ṟ) R with line below
compose["Lt"] := "{u+1e6f}" ; (ṯ) t with line below
compose["LT"] := "{u+1e6e}" ; (Ṯ) T with line below
+compose["Lu"] := "{u+1e75}" ; (ṵ) u with tilde below
+compose["LU"] := "{u+1e74}" ; (Ṵ) U with tilde below
compose["Lz"] := "{u+1e95}" ; (ẕ) z with line below
compose["LZ"] := "{u+1e94}" ; (Ẕ) Z with line below
; Key : 2
>!sc003::
-<^>!sc003::Send "{u+2264}" ; (≤) less-than or equal to
+<^>!sc003::Send "{u+00b2}" ; (²) superscript 2
>!+sc003::
-<^>!+sc003::Send "{u+00b2}" ; (²) superscript 2
+<^>!+sc003::Send "{u+266b}" ; (♫) beamed eighth notes
; Key : 3
>!sc004::
-<^>!sc004::Send "{u+2265}" ; (≥) greater-than or equal to
+<^>!sc004::Send "{u+00b3}" ; (³) superscript 3
>!+sc004::
-<^>!+sc004::Send "{u+00b3}" ; (³) superscript 3
+<^>!+sc004::Send "{u+00a7}" ; (§) section sign
; Key : 4
>!sc005::
>!sc009::
<^>!sc009::Send "{u+201e}" ; („) double low-9 quotation mark
>!+sc009::
-<^>!+sc009::Send "{u+00a7}" ; (§) section sign
+<^>!+sc009::Send "{u+266a}" ; (♪) eighth note
; Key : 9
>!sc00A::
>!sc027::
<^>!sc027::Send "{u+00b0}" ; (°) degree sign
>!+sc027::
-<^>!+sc027::Send "{u+00b7}" ; (·) middle dot
+<^>!+sc027::Send "{u+2264}" ; (≤) less-than or equal to
; Key : ' / " (apostrophe / quotation mark)
>!sc028::
-<^>!sc028::Send "{u+266a}" ; (♪) eighth note
+<^>!sc028::Send "{u+00b7}" ; (·) middle dot
>!+sc028::
-<^>!+sc028::Send "{u+266b}" ; (♫) beamed eighth notes
+<^>!+sc028::Send "{u+2265}" ; (≥) greater-than or equal to
; Key : \ / | (backslash / vertical line)
>!sc02B::
>!sc056:: ; Right Alt + ISO Key
<^>!sc029:: ; AltGr + Grave Accent
<^>!sc056:: { ; AltGr + ISO Key
- keys := InputHook("L2", gEndKeys)
- keys.Start()
- keys.Wait()
- if compose.Has(keys.Input)
- Send compose[keys.Input]
+ ih := InputHook("L2", gEndKeys)
+ ih.Start(), ih.Wait()
+ if compose.Has(ih.Input)
+ Send compose[ih.Input]
}